package com.study.newjava8.lambda;

import com.study.newjava8.pojo.Employee;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Stream的中间操作
 */
public class TestStreamAPI2 {

    List<Employee> employees = Arrays.asList(
            new Employee("huangsm", 22, 40020.0),
            new Employee("huangsm1", 24, 52300.0),
            new Employee("huangsm1", 24, 52300.0),
            new Employee("huangsm1", 24, 52300.0),
            new Employee("huangsm2", 26, 40100.0),
            new Employee("huangsm3", 21, 42300.0)
    );

    /**
     * 筛选与切片
     * filter--接收一个Lambda，从流中排除某些元素
     */
    @Test
    public void test1() {
        Stream<Employee> stream = employees.stream()
                .filter(e -> e.getAge() > 25);
        //终止操作
        stream.forEach(System.out::println);
    }

    /**
     * limit--截断流，使其元素不超过给定数量。
     * 只需要找到满足条件的结果以后，后续操作不需要在操作了。
     */
    @Test
    public void test2() {
        employees.stream()
                .limit(4)
                .forEach(System.out::println);
    }

    /**
     * skip(n)--跳过元素，返回一个扔掉了前n个元素的流。若流中元素
     * 不足n个，则返回一个空流。与limit(n)互补。
     */
    @Test
    public void test3() {
        //跳过前两个
        employees.stream()
                .skip(2)
                .forEach(System.out::println);
    }

    /**
     * distinct--筛选，通过流锁生成元素的hashCode()和equals()去除重复元素
     */
    @Test
    public void test4() {
        //去重复
        employees.stream()
                .distinct()
                .forEach(System.out::println);
    }
}

